package org.agile4j.patterns.command.macros;

import java.util.ArrayList;
import java.util.List;

/**
 * 命令队列类
 * @author user
 *
 */
public class CommandQueue {
	
	/**
	 * 文件名称
	 */
	private static String fileName = "CmdQueue.log" ;

	/**
	 * 用来存储命令对象的队列
	 */
	private static List<Command> cmds = null ;
	
	static {
		cmds = (List<Command>) FileOpeUtil.readFile(fileName) ;
		if(cmds ==null){
			cmds = new ArrayList<Command>()  ;
		}
	}
	
	/**
	 * 服务员传过来一个新的菜单, 需要同步
	 * 因为同时会有很多的服务员传入菜单, 儿童诗又有很多厨师在从队列里取值
	 * @param menu 传入的菜单
	 */
	public synchronized static void addMenu(MenuCommand menu){
		// 一个菜单对象包含很多命令对象
		for(Command cmd : menu.getCommands()){
			cmds.add(cmd) ;
		}
		// 记录请求日志
		FileOpeUtil.writeFile(fileName, cmds);
	}
	
	public synchronized static Command getOneCommand() {
		Command cmd = null;
		if (cmds.size() > 0) {
			// 取出队列的第一个, 因为是约定的按照加入的先后来处理
			cmd = cmds.get(0);
			// 同时从列队里取掉这个命令对象
			cmds.remove(0);
		}
		// 记录请求日志
		FileOpeUtil.writeFile(fileName, cmds);
		return cmd;
	}
}
